Recording Waveform Audio

If the MCI waveform-audio recording services do not meet the specifications of your application, you can handle waveform-audio recording using the waveform-audio services. For more information, see MCIYKB0V8.

Waveform-Audio Input Data Types

The following data types are defined for waveform-audio input functions:

Type

Description

HWAVEIN

Handle of an open waveform-audio input device.

WAVEFORMATEX2R_J_MS

Structure that specifies the data formats supported by a particular waveform-audio input device. This structure is also used for waveform-audio output devices.

WAVEHDR3CAL0JU

Structure used as a header for a block of waveform-audio input data. This structure is also used for waveform-audio output devices.

WAVEINCAPS123B0QA

Structure used to inquire about the capabilities of a particular waveform-audio input device.

 

Querying Waveform-Audio Input Devices

Before recording waveform audio, you should call the waveInGetDevCapsCD85C0 function to determine the waveform-audio input capabilities of the system. This function fills a WAVEINCAPS123B0QA structure with information about the capabilities of a specified device. This information includes the manufacturer and product identifiers, a product name for the device, and the version number of the device driver. In addition, the WAVEINCAPS structure provides information about the standard waveform-audio formats that the device supports.

Opening Waveform-Audio Input Devices

Use the waveInOpenDZFQLF function to open a waveform-audio input device for recording. This function opens the device associated with the specified device identifier and returns a handle of the open device by writing the handle of a specified memory location.

Some multimedia computers have multiple waveform-audio input devices. Unless you know you want to open a specific waveform-audio input device in a system, you should use the WAVE_MAPPER constant for the device identifier when you open a device. The waveInOpen function will choose the device in the system best able to record in the specified data format.

Managing Waveform-Audio Recording

After you open a waveform-audio input device, you can begin recording waveform-audio data. Waveform-audio data is recorded into application-supplied buffers specified by a WAVEHDR3CAL0JU structure. These data blocks must be prepared before they are used; for more information, see Audio Data BlocksFP81VZ.

Windows provides the following functions to manage waveform-audio recording.

Function

Description

waveInAddBuffer76989G

Sends a buffer to the device driver so it can be filled with recorded waveform-audio data.

waveInReset1YGO.4B

Stops waveform-audio recording and marks all pending buffers as done.

waveInStartJ6EV_M

Starts waveform-audio recording.

waveInStopDZJUVH

Stops waveform-audio recording.

 

Use the waveInAddBuffer76989G function to send buffers to the device driver. As the buffers are filled with recorded waveform-audio data, the application is notified with a window message, callback message, thread message, or event, depending on the flag specified when the device was opened.

Before you begin recording by using waveInStartJ6EV_M, you should send at least one buffer to the driver, or incoming data could be lost.

Before closing the device using waveInClose1Y8V8B3, call waveInReset1YGO.4B to mark any pending data blocks as being done.

Using Window Messages to Manage Waveform-Audio Recording

The following messages can be sent to a window procedure function for managing waveform-audio recording.

Message

Description

MM_WIM_CLOSE1.GYC_O

Sent when the device is closed by using the waveInClose1Y8V8B3 function.

MM_WIM_DATA4MO9YB0

Sent when the device driver is finished with a buffer sent by using the waveInAddBuffer76989G function.

MM_WIM_OPEN4MOE_3G

Sent when the device is opened by using the waveInOpenDZFQLF function.

 

The lParam parameter of MM_WIM_DATA4MO9YB0 specifies a pointer to a WAVEHDR3CAL0JU structure that identifies the buffer. This buffer might not be completely filled with waveform-audio data; recording can stop before the buffer is filled. Use the dwBytesRecorded member of the WAVEHDR structure to determine the amount of valid data present in the buffer.

The most useful message is probably MM_WIM_DATA. When your application finishes using the data block sent by the device driver, you can clean up and free the data block. Unless you need to allocate memory or initialize variables, you probably do not need to use the MM_WIM_OPEN4MOE_3G and MM_WIM_CLOSE1.GYC_O messages.

The callback function for waveform-audio input devices is supplied by the application. For information about this callback function, see the waveInProc178SSBK function.